有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

访问作为参数传递的数组元素

我有一个方法,它将数组作为另一个类的参数:

public void memPass(Memory[] memLocList) {

    memList = memLocList;

            for (int i = 0; i < 10; i++) {
        System.out.println(memList[i].getSomething());
    }
}

-编辑- 上面打印出10个值(整数),但如果我在另一个方法中尝试相同的方法,使用0&;10我得到了NPE

有人能告诉我如何从另一个方法访问这个数组的元素吗?这个方法也接受另一个类的参数

我正试图按照以下思路做一些事情:

public void accessArray(int mem) {

           int someInt = memList[mem].getSomething();
}

-编辑-抱歉,我应该补充一点,这会产生NullPointerException

-新编辑-

好的,我现在编辑了代码,所以我在课堂上的所有内容是:

public class PLoop {

// instance variable
public Memory[] memlist;

  // method 1 
  public void memPass(Memory[] memLocList) {

   memList = memLocList;
   System.out.println(memList.length);
  }

  // method 2
  public void accessArray(int mem) {

   System.out.println(memList.length);
  }
}

第一种方法打印一个表示“memList”长度的整数,第二种方法给出一个NPE


共 (2) 个答案

  1. # 1 楼答案

    如果memList是该类的一个实例变量,并且在两种情况下(两种方法)都是同一个类,那么这显然是memList的某个索引处的null

    private static class Memory {
        private static int index = 0;
    
        public int getSomething() {
            return index++;
        }
    }
    
    private static class Test {
        public Memory[] memlist;
    
        public void memPass(Memory[] memLocList) {
            memlist = memLocList;
        }
    
        public void accessArray(int mem) {
            int someInt = memlist[mem].getSomething();
            System.out.println(someInt);
        }
    }
    public static void main(String args[]) {
        Test t = new Test();
        Memory[] memList = new Memory[4];
        memList[0] = new Memory();
        memList[1] = null;
        t.memPass(memList);
        t.accessArray(0);
        t.accessArray(0);
        t.accessArray(1); //NPE thrown because null value in array
        //or
        Test t2 = new Test();
        t2.accessArray(0); //NPE thrown because array is null (different instance)
    }
    
  2. # 2 楼答案

    如果我理解的没错,您希望能够存储memLocList,然后稍后再访问它吗?如果是这样,我看不出创建实例变量会有什么问题

    public class Test {
        public Memory[] memlist;
    
        public void memPass(Memory[] memLocList) {
            memList = memLocList;
        }
    
        public void accessArray(int mem) {
            int someInt = memList[mem].getSomething();
        }
    }
    

    当然,我不再使用Java,所以可能无法创建和分配这样的实例变量。但是你可以把元素储存在另一个容器里

    public class Test {
        public List<Memory> memlist;
    
        public void memPass(Memory[] memLocList) {
            memlist = new ArrayList<Memory>(Arrays.asList(memLocList));
        }
    
        public void accessArray(int mem) {
            int someInt = memList.get(mem).getSomething();
        }
    }
    

    抱歉,如果我有语法错误。但你明白了重点